﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Dominio
{
    public partial class FileSystemElement : IIdentificable
    {

        public virtual IList<FileSystemElement> ObtenerHijos() 
        {
            List<FileSystemElement> hijos = new List<FileSystemElement>();
            using (DominioContainer ctx = new DominioContainer())
            {
                var query = from elem in ctx.FileSystemElements
                            where elem.Ruta.StartsWith(this.Ruta+"/"+this.Nombre)
                            select elem;
                foreach (FileSystemElement fe in query)
                {
                    hijos.Add(fe);
                }
            }
            return hijos; 
        }

        //public virtual string ObtenerLink(){return this.Ruta+"/"+this.Nombre;}
        public string ObtenerLink 
        {
            get { return Ruta + "/" + Nombre; }
        }
        public virtual long GetTamanio() 
        {
            long tamanio = 0;
            DirectoryInfo dir= new DirectoryInfo(Ruta+"/"+Nombre);
            FileSystemInfo[] fsi = dir.GetFileSystemInfos();
            foreach (FileSystemInfo f in fsi)
            {
                FileSystemElement fe= new FileSystemElement();
                if (f is FileInfo)
                {
                    tamanio += ((FileInfo)f).Length;
                }
                else
                {
                    fe.Nombre = f.Name;
                    fe.Ruta = ObtenerRuta(f.FullName);
                    tamanio += fe.GetTamanio();
                }
                
            }
            return tamanio; 
        }
        private string ObtenerRuta(string p)
        {
            string fullPath = p.Replace("\\", "/");
            int pos = fullPath.LastIndexOf("/");
            return fullPath.Substring(0, pos);
        }

        public virtual string GetExtension(){return "";}

        public int GetId()
        {
            return Id;
        }
    }
}
